workspaceThumbnail: Allocate final thumbnail sizes
ThumbnailsBox currently allocates each workspace thumbnail using their
porthole size, and scales them down using scale-x and scale-y. This is
slightly problematic since it doesn't allow for properly styling these
thumbnails through CSS.
Rework ThumbnailsBox to allocate workspace thumbnails at their actual
sizes, and scale down the '_contents' actor inside WorkspaceThumbnail.
Allocate workspace thumbnails horizontally. This requires introducing code
to handle the RTL direction. Do a small rewrite of the DnD hover method to
be simultaneously simpler and easier to follow, and work correctly on RTL.
overviewControls: Move workspaces thumbnails to ViewSelector
This is now all centralized in the apps page, so move the workspaces
thumbnails to ViewSelector's apps page. This allows us to remove
all the slider controls too, since they're now unused.
The transition between showing the workspaces, and the app grid, is
based on the most recent mockups: scale and move it down, and fade it
out.
Now that there's only a ACTIVITIES and a SEARCH page, the old method of handling
keyboard tabbing (extra parameters to ViewSelector._addPage()) limits what we can
do.
Manually set up the Ctrl+Alt+Tab support for each element.
Add them both in a StBoxLayout subclass with a vertical layout. This
new ActivitiesContainer class already contains an adjustment controlling
the transition between workspaces and app grid states, and althought it
is internal to it, it'll be easy to integrate with gestures in the
future.
Notice that AppDisplay is added before WorkspacesDisplay. That's because
we want the paint order to paint WorkspacesDisplay on top of AppDisplay.
Switch the ViewsPage enum to call this page ACTIVITIES, and adjust the
only caller in OverviewControls to it. At last, rename '_appsPage' to
'_activitiesPage' to also reflect the name change.
The usefulness of organizing this code in pages is lost here, but this
is a transitional state, and pages will be removed in future changes.
workspacesView: Add API to hide workspaces without destroying
This will be used by the next commit to hide workspaces when ViewSelector
switches to the search page, without destroying the workspaces so their
state is preserved.
Florian Müllner [Thu, 28 Jan 2021 22:24:44 +0000 (23:24 +0100)]
dash: Add separator between favorite and running apps
Only the area used by favorite apps can be used as drop targets, it
is not possible to add new favorites between the running apps at the
end. While that behavior makes sense, it is currently impossible to
distinguish the two areas with confusing results.
Address this by adding a visual separator between favorites and
running apps.
Florian Müllner [Mon, 25 Jan 2021 11:32:26 +0000 (12:32 +0100)]
screenshot: Return error if stream creation failed
When we fail for some reason to open a stream to write the screenshot
to, we currently return `false` to the sender. That's not wrong, but
doesn't provide any hints on what caused the failure, so return the
underlying error instead.
Florian Müllner [Mon, 25 Jan 2021 11:38:51 +0000 (12:38 +0100)]
screenshot: Use separate error when disk writes are locked down
The most likely reason for rejecting a screenshot request is that
there's an ongoing operation from the same sender. Still, we shouldn't
assume that that is the case and return an appropriate error when
writing to disk is disabled via lockdown settings.
Razze [Thu, 28 Jan 2021 19:26:54 +0000 (20:26 +0100)]
loginDialog: Keep hint string from pushing the login box higher
When we display the hint string for e.g. (or swipe finger), the login
box gets pushed up. This is leftover from older styling and should be
removed. The padding-top is unnecessary and can also be removed, so just
remove the whole line styling login-dialog-message-hint from the
stylesheet.
On X11, the scroll handler can receive smooth events, which should
trigger a workspace switch. Handle smooth events by checking their
scroll delta, and adjusting the direction depending on these deltas.
Sebastian Keller [Wed, 27 Jan 2021 22:27:31 +0000 (23:27 +0100)]
screenshot: Still remove select/pick actor if grab promise was rejected
If the grab promise is rejected due to for example on X another app
already having the grab, an error is thrown and the code that would
revert the cursor and hide the actor is not run. This actor then
prevents all mouse interactions with the shell and the windows beneath
it.
Florian Müllner [Fri, 8 Jan 2021 01:14:42 +0000 (02:14 +0100)]
workspacesView: Fix off-by-one error
The scroll adjustment's upper value corresponds to the number of
workspaces, not to the last workspace index. We want the latter
when mirroring the layout in RTL locales, so subtract 1.
Florian Müllner [Tue, 26 Jan 2021 16:12:04 +0000 (17:12 +0100)]
extensionSystem: Fix opening Extensions app from notification
Launching the app is implemented by the source's open() method, but
only external notifications are hooked up to call into the source
when no default action was provided.
Doan Nam Long Vu [Sun, 24 Jan 2021 20:39:43 +0000 (21:39 +0100)]
panel: Remove drop down arrows from standalone indicators
The keyboard/language selector area is the smallest element
on the panel. Additional margin about 6px inside the a11y
and language items to make them comfortable to click targets.
appDisplay/appFolderDialog: Don't constrain to workarea
With the transparent top bar in the overview, constraining to the
primary monitor's workarea causes the (now visible) area beneath
the top bar to not have the darker background, which causes a visual
discontinuity in the layout.
Sebastian Keller [Wed, 20 Jan 2021 01:03:49 +0000 (02:03 +0100)]
appDisplay: Fix app folder icon subicon spacing
The code previously was using CSS to define row/column spacing and
padding which was combined with a subicon size computed in code relative
to the requested icon size.
In smaller icon sizes it was possible for the CSS spacing+padding + the
size of the two subicons to exceed the requested icon size. This then
would lead to the label being pushed down for app folders compared to
other icons.
Another more severe issue caused by this would happen if the first item
in an icon grid was an app folder. Then the calculation for the maximum
allowed icon size could be off, leading to all icons in the grid
becoming smaller than actually necessary.
This commit changes this to use homogeneous row and column layouts to
evenly distribute the remaining spacing instead of using a fixed CSS
value.
Florian Müllner [Wed, 20 Jan 2021 00:44:21 +0000 (01:44 +0100)]
appDisplay: Do not duplicate app favorites
With the new position, the dash is now stronger connected to the
app grid than it used to; reflect that by showing apps either
in the grid or the dash, not both (except for non-favorite
running apps).
Sebastian Keller [Wed, 13 Jan 2021 22:24:49 +0000 (23:24 +0100)]
workspacesView: Disable swipe tracker when animating from overview
It was possible to switch workspaces by quickly dragging the workspace
immediately after clicking on a window during the transition from the
overview. This is unlikely something that is intentionally used but can
be confusing and look bad when triggered accidentally.
Sebastian Keller [Tue, 19 Jan 2021 20:12:49 +0000 (21:12 +0100)]
automountManager: Remove unused volume queue
This is some leftover from code that was used to keep track of volumes
added/removed while the screen was locked before the move to a
components system in 2a800e4c. All that the remaining code does is
filter devices from an empty list.
Florian Müllner [Mon, 18 Jan 2021 23:57:30 +0000 (00:57 +0100)]
overviewControls: Simplify dash placement
Now that the dash is always visible, it doesn't make sense to keep
it in a separate layer from the main overview group and use a
separate spacer actor as a placeholder.
Now that the Dash is horizontal, the popup menu of the Dash icons must
show up, instead of left/right.
Make AppIcon.popupMenu() receive an optional parameter with the side
to show the menu, using St.Side.LEFT as default. Override this method
in DashIcon to always pass St.Side.TOP.
And move it to the bottom of the overview. Change the height-based calculation
of the icon sizes to be width-based. Put the DashFader in a vertical box, and
make all corners of the Dash equally rounded.
Florian Müllner [Mon, 18 Jan 2021 16:33:05 +0000 (17:33 +0100)]
Tag release 40.alpha.1.1
Like the mutter 40.alpha.1.1 release, we missed adjusting to a
GSettings schema move from g-s-d to gsettings-desktop-schemas,
resulting in an abort on startup with the latest released
gnome-settings-daemon.
With the previous preparations in place, it is time to take the plunge.
As both the app and the portal use the same small library for handling
external windows, port everything at once to avoid the hassle of building
and installing two versions of the library.
With the portal using GTK4 now, all extensions must port their preference
widgets as well.
In GTK4, all widgets are reactive, and therefore GtkEventBox has
been removed. In order to make the upcoming GTK4 port a bit cleaner,
remove the expander's event box now.
Florian Müllner [Fri, 13 Nov 2020 01:36:08 +0000 (02:36 +0100)]
dbusServices/extensions: Stop stacking frames
We currently use separate frames for the details expander and the
expanded details. That layout works as long as frames are boxy (as
in the default GTK3 style), but breaks down with rounded corners
(as in the default GTK4 style).
In order to work with either style, adapt the layout to use a single
surrounding frame and appropriate borders as separator.
dbusServices/extensions: Use consistent style for property names
GtkBuilder understands both dashes and underscores in property names,
and we currently use a mix of both. The actual properties use dashes,
so settle on that.
dbusServices/extensions: Set title on window instead of headerbar
GTK4 will remove the GtkHeaderBar:title property, so stop using it
and set the window's title property instead, as that's what headbars
use in both GTK3 and GTK4 unless explicitly overridden.
Florian Müllner [Wed, 18 Nov 2020 01:16:26 +0000 (02:16 +0100)]
extensions-app: Explicitly dispose window when removed
Unlike in previous GTK version (or Clutter), destroy() no longer
breaks reference cycles but just releases the reference held by
GTK itself.
So any reference we hold - either the explicit property or any signal
handlers that bind the window as `this` - prevents the window from
being disposed when closed, and the application won't quit.
Work around this by explicitly running dispose() on the window when
it is removed from the application.
extensions-app: Use consistent style for property names
GtkBuilder understands both dashes and underscores in property names,
and we currently use a mix of both. The actual properties use dashes,
so settle on that.
extensions-app: Set title on window instead of headerbar
GTK4 will remove the GtkHeaderBar:title property, so stop using it
and set the window's title property instead, as that's what headbars
use in both GTK3 and GTK4 unless explicitly overridden.
Razze [Wed, 13 Jan 2021 21:56:04 +0000 (22:56 +0100)]
status/volume: Allow changing input volume by scrolling
Previously scrolling on the volume or input indicator would always
change the volume. This change lets you change the input volume if
you scroll over the input indicator.
Jonas Dreßler [Thu, 6 Aug 2020 18:58:44 +0000 (20:58 +0200)]
panel: Make the panel fully transparent while in the overview
The overview is using a heavily darkened background image nowadays.
Since the contrast provided by this is always good enough, this makes it
possible to always have a fully transparent panel while showing the
overview.
So change the theme to always make the panel fully transparent while the
overview is shown. The duration of the animation for that is 250ms
because that's the duration of the show and hide animation of the
overview.
Also add special handling for the high-contrast theme, where we always
make the panel opaque.
Jonas Dreßler [Thu, 6 Aug 2020 18:50:09 +0000 (20:50 +0200)]
overview: Increase SHADE_ANIMATION_TIME a bit
The SHADE_ANIMATION_TIME variable sets the duration of the animation of
the background shading that is done when showing the overview. As
explained in the code-comment, that value must be smaller than the
animation time of the overview.
Now since we're going to start animating the background color of the
panel when showing the overview and we're going to use the overviews
animation time for that, we want to make sure the shading of the
background image and the animation of the panel are kept "in sync",
otherwise the transitions would look bad.
So slightly increase the value of SHADE_ANIMATION_TIME to 240 (the
overviews animation time is 250) to make sure those happen in the same
timeframe.
Jonas Dreßler [Tue, 4 Aug 2020 11:47:59 +0000 (13:47 +0200)]
panel: Indicate focus using a pill-shaped background
The current way of indicating focus of elements in the panel does not
work very well with a fully-transparent panel, a line at the bottom of
the panel doesn't make too much sense if there is no real panel, but
only the text and icons.
To make the indicators look better in this case, switch to a pill-shaped
background color to indicate the focus of items in the panel.
For this to look good, there has to be a small black border above and
below the background, this also requires increasing the height of the
panel (from 1.86em to 2.2em) for visual purposes.
Also, since we now no longer need to color the lower bottom of the
panel, we can remove the custom drawing code for the border of the
panels corner, so do that.
Jonas Dreßler [Tue, 4 Aug 2020 09:47:18 +0000 (11:47 +0200)]
theme/panel: Slightly increase horizontal padding on activities button
The activities button doesn't have an icon, which makes its horizontal
padding appear a bit smaller than the padding of most other items in the
panel.
We're going to indicate hover and focus of items in the panel using a
pill-shaped background color, which means the padding of those items
will get more visible. So give the activities button a special treatment
and slightly increase its padding to make sure the new indicator will
look good.
workspace: Don't unfreeze layout during overview animation
During overview closing animation the allocation expands more or less
every frame. Unfreezing the layout then leads to windows snapping to
their new position if e.g. a window was closed which doesn't look nice.
Jonas Ådahl [Fri, 18 Dec 2020 15:21:58 +0000 (16:21 +0100)]
workspacesView: Update scroll position but not workspace on allocate
Not updating the scroll position on allocate caused a glitch, where a
window on a workspace that is not the first one would would be
transparent for one frame when showing the overview.
Florian Müllner [Tue, 15 Dec 2020 17:02:51 +0000 (18:02 +0100)]
ci: Add some more commit message rules
Mutter added some additional rules, for instance to enforce proper
capitalization style in commit messages. That's a good idea, and
now that adding rules is easy, let's adapt them to gnome-shell.
Florian Müllner [Thu, 7 Jan 2021 21:33:47 +0000 (22:33 +0100)]
screenShield: Tie `LockedHint` to locked state
Currently the hint reflects the `active` state, which effectively
corresponds to the screen blank. That's a bit surprising considering
the name, plus the `active` state is already exposed by the ScreenSaver
D-Bus interface for anyone interested.
It seems reasonable that the `LockedHint` property reflects the lock
state, so change the handling to do exactly that.
Florian Müllner [Fri, 12 Jun 2020 22:08:50 +0000 (00:08 +0200)]
appDisplay: Disable built-in mouse scrolling
We want to either handle a scroll event ourselves, or delegate it
to the swipe tracker. What we never want is StScrollView's default
handler that doesn't have any knowledge of pages, so disable it.
workspacesView: Make sure to destroy non-existing workspaces
Even if they're in the end of the list. So far we've managed to not be affected
by this bug because until GNOME 3.38, workspaces didn't have a background, and
there was no way to navigate to these leftover workspaces, but with the proposed
overview changes for GNOME 40 it'll be very much visible.
When handling all scroll directions, it is imperative to ignore emulated
events. Otherwise we may get the wrong scroll direction, e.g. when natural
scrolling is enabled.
Ignore pointer emulated events in WorkspaceDisplay._onScroll().